Beats作为Elastic Stack家族中重要的部分。它可以和方便地让我们把我们的数据发送到Elasticsearch或Logstash之中。如果我们想要生成自己的Beat,请使用GitHub的beats仓库中提供的Beat生成器。在今天的文章中,我们将详细介绍如何一步一步地来创建一个我们自己想要的beat。
设置自己的开发环境
安装go环境
Beats实际上是go程序。我们可以参照链接“Go get started”(https://golang.org/doc/install)来安装自己的golang语言开发环境。等我们安装好我们的go后,我们可以在terminal中打入如下的命令:
1 | $ which go |
那么我们需要在我们的环境中设置如下的变量:
1 | export GOROOT=/usr/local/go |
在这里,我也设置了以GOPATH。你可以设置自己的路径。针对我的情况,我在我的home目录下创建了一个go目录,并在go目录下生产一个叫做beats的目录。在一下,我们会在这个目录里生成我们的定制的beat。
下载Elastic beats源码
在这一步我们下载Elastic beats的源码。在termnial中打入如下的命令:
1 | mkdir -p ${GOPATH}/src/github.com/elastic |
安装Python
目前generator只对Python2适用,所以,我们需要安装Python2。我们可以参照页面https://www.python.org/downloads/进行安装我们的python2。
安装virtualenv
我们必须安装virtualenv才能使得generator正常工作。可以参照链接https://virtualenv.pypa.io/en/latest/installation/来进行安装。如果自己的电脑上同时已经安装了python3,那么我们需要同时设置如写变量:
1 | export PYTHON_EXE='python2.7' |
请注意:这里的python是2.x版本的python,而不是python3。我们需要保证VIRTUALENV_PYTHON指向我们的Python2的执行文件。
安装mage
我们需要在地址https://github.com/magefile/mage下载这个源码,并编译:
1 | go get -u -d github.com/magefile/mage |
等上面的命令执行完后,我们可以在如下的目录中找到编译好的执行文件mage:
1 | liuxg-2:bin liuxg$ ls $GOPATH/bin |
创建定制beat
首先创建一个目录在$GOPATH下,并进入该目录。
1 | mkdir ${GOPATH}/src/github.com/{user} |
注意这里的user指的是自己在github上的用户名。比如针对我的情况是liu-xiao-guo。我打入如下写的命令:
1 | mkdir ${GOPATH}/src/github.com/liu-xiao-guo |
接下来,我们运行如下的命令:
1 | mage GenerateCustomBeat |
执行结果:
1 | $ mage GenerateCustomBeat |
这样,我们基本上就生产了一个最基本的beat的框架。
接下来,我们进入到我们的beat目录里,并进行编译:
1 | cd ${GOPATH}/src/github.com/{user}/countbeat |
针对我的情况:
1 | cd ${GOPATH}/src/github.com/liu-xiao-guo/countbeat |
我们可以看一下里面最基本的文件:
1 | $ pwd |
这里有最基本的框架文件。里面含有一个叫做countbeat.yml的配置文件及一些标准的模板文件。我们在命令行中直接打入如下的指令:
1 | make |
经过上面的编译,我们可以发现在当前的目录下,有一个已经编译好的countbeat可执行文件:
我们在当前的目录下直接运行这个可执行的文件:
1 | ./countbeat -e -d "*" |
我们可以在terminal中看到:
那么在我们的Kibana中也可以看到如下信息:
显然数据已经被成功上传到Elasticsearch中了。
每一个文档的内容如下:
1 | { |
它里面含有一个counter的整数值。
所有关于beat的设计上的代码可以在目录${GOPATH}/src/github.com/liu-xiao-guo/countbeat下的/beater/CountBeat.go文件里实现的。设计比较直接。大家可以看一下代码应该可以明白。
读取JSON文件beat
在上面我们已经熟悉了如何去创建一个template的beat。它是一个最基本的beat,并没有什么特别的功能。在这节里,我们接着如法炮制来创建一个稍微有一点用途的beat。我们的这个beat叫做readjson beat。它的源码可以按照如下的方法得到:
1 | git clone https://github.com/liu-xiao-guo/beats-readjson |
首先,我们可以准备一个我们想要的json文件,比如:
1 | users.json |
我们可以把这个文件放入到我们如何喜欢的位置。针对我的情况,我把它置于我的电脑的如下位置:
1 | /Users/liuxg/data/beats/users.json |
我们可以在readjson.yml文件中进行配置:
1 | readjson.yml |
我们的readjson.go设计也相当简单:
1 | readjson.go |
它在run method里把json文件读入,并把它们分别发送出去到我们的Elasticsearch中。
我们按照上面的步骤进行编译,并最终运行我们的readjson beat。
1 | ./readjson -e |
我们可以在Kibana中看到我们已经发送上来的beat信息:
参考:
【1】https://www.elastic.co/guide/en/beats/devguide/7.5/newbeat-generate.html